package com.itheima.stream;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 演示FileOutputStream的使用，案例：将数据写出到a.txt文件中
 * 步骤：
 * --1. 创建FileOutputStream对象，构造方法中传递写入数据的目的地
 * --2. 使用FileOutputStream对象中的方法write（多个），把数据写入到目的地中
 * --3. 释放资源（关流）
 * <p>
 * 构造函数：
 * --1. FileOutputStream(String fileName) 传入文件的名字
 * --2. FileOutputStream(File file) 传入File对象
 * --3. FileOutputStream(String fileName,boolean append)
 * append：追加写，如果为true，则把数据写入到已有的文件中，而不是覆盖原文件
 * 默认为false，覆盖原文件
 * --4. FileOutputStream(File file,boolean append)
 * 成员方法：
 * --1. write(int b) 一次只能写一个字节到文件中
 * --2. write(byte[] b) 一次写一个字节数组到文件中
 * {97,98,99,100}
 * --3. write(byte[] b,int off,int len) 一次写一个字节数组的一部分到文件中
 *
 *
 * 补充：String类的一个成员方法
 *  public byte[] getBytes() 将字符串转化为字节数组,使用默认字符码表
 *
 */
public class FileOutputStreamDemo {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("a.txt");
        byte[] buffer = {97, 98, 99, 100};
//        String str = "hello,world!\r\n你好，我的朋友";
        // 将字符串转化为字节数组
//        byte[] bytes = str.getBytes();//[97,98,99]
//        fos.write(buffer);
//        fos.write(buffer, 1, 2);
        fos.write(buffer,1,2);
        fos.close();
    }
    /**
     * 一次写一个字节
     */
    private static void test1() throws IOException {
        //1. 创建FileOutputStream对象，构造方法中传递写入数据的目的地
        /*
            路径：
              1. 绝对路径，是以盘符开头的路径，如：D:/a.txt，或者以 /开头的，如：/Users/mac/a.txt
              2. 相对路径，不是以盘符和/开头的路径，如：a.txt，相对当前工程目录的路径
         */
        FileOutputStream fos = new FileOutputStream("a.txt",true);
        //2. 使用FileOutputStream对象中的方法write（多个），把数据写入到目的地中
        fos.write(97);//Ascii码：97--(文本文件的形式)-->a
        fos.write(98);//Ascii码：97--(文本文件的形式)-->a
        fos.write(99);//Ascii码：97--(文本文件的形式)-->c
        fos.write(100);//Ascii码：97--(文本文件的形式)-->d
        //3. 释放资源（关流）,未来我们开发的程序在服务器上是7*24小时运行的。
        fos.close();
    }

}
